var name = '小红';

function a() {
    var name = '小白';
    console.log(this.name)
}

function d(i) {
    return i();
}

function e(i) {
    return i;
}

var b = {
    name: '小黄',
    detail: function () {
        console.log(this.name)
    },
    bi: function () {
        return function () {
            console.log(this.name);
        };
    }
}


// 这里相当于函数表达式,和b没啥关系
//c就是个函数，在全局范围内被调用
var c = b.detail;

//对象b调用console.log(this.name)
b.a = a;

var f = b.bi();

//浏览器输出小红
//在全局范围内调用a，没有指明对象，发生了默认绑定
a();

//浏览器输出小红
c();

//浏览器输出小黄
b.a();

//浏览器输出小红
// b.detail只是参数，
// 实际上是全局范围调用函数d
d(b.detail);

//浏览器输出小黄
e(b.detail())

//bi是一个闭包
//b.bi()还是函数console.log(this.name)
//可以在浏览器里分别敲下边两行代码
//b.bi;
//b.bi();

//浏览器输出小红
f();